package br.com.hstar.client;

import br.com.hstar.client.cliente.cartaofidelidade.CartaoFidelidadeListPanel;
import br.com.hstar.client.cliente.cheque.ChequeListPanel;
import br.com.hstar.client.cliente.cliente.ClienteListPanel;
import br.com.hstar.client.cliente.tipocliente.TipoClienteListPanel;
import br.com.hstar.client.config.CadQuartoListPanel;
import br.com.hstar.client.formapgto.FormaPgtoEditPanel;
import br.com.hstar.client.fornecedor.FornecedorListPanel;
import br.com.hstar.client.funcionario.funcao.FuncaoListPanel;
import br.com.hstar.client.funcionario.funcionario.FuncionarioListPanel;
import br.com.hstar.client.patrimonio.PatrimonioListPanel;
import br.com.hstar.client.produto.centrocusto.CentroCustoListPanel;
import br.com.hstar.client.produto.grupo.GrupoListPanel;
import br.com.hstar.client.produto.produto.ProdutoListPanel;
import br.com.hstar.client.tabelapreco.TabelaPrecoEditPanel;
import br.com.hstar.client.usuario.AlterarSenhaPanel;
import br.com.hstar.client.usuario.LoginPanel;
import br.com.hstar.client.usuario.UsuarioListPanel;
import br.com.hstar.client.usuario.UsuarioUI;
import br.com.hstar.client.util.ClientSession;

import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.MenuBar;
import com.google.gwt.user.client.ui.RootPanel;

public class ApplicationMenu {

	private static MenuBar menuBar;
	private static String imagem = new String("&nbsp;<img src='"+
			GWT.getModuleBaseURL()+"img/ic_setaMenu.gif'>");

	public static MenuBar getMenuBar(){

		if(ClientSession.getInstance().getProperty("usuario") == null) {
			RootPanel.get("boxContent").clear();
			RootPanel.get("boxContent").add(new LoginPanel("Efetue o Login"));
		} else {	
			menuBar = new MenuBar();
		    menuBar.setStyleName("gwt-MenuBar");
			
			int permissao = ((UsuarioUI)ClientSession.getInstance().
					getProperty("usuario")).getPermissao().intValue();
			
			if(permissao == UsuarioUI.ADMINISTRADOR) {
				MenuBar dadosBasicos = new MenuBar(true);
				
			    MenuBar cliente = new MenuBar(true);
				cliente.addItem("Cliente", clie);
				cliente.addItem("Tipo do Cliente", tipoCliente);
				cliente.addItem("Cartão Fidelidade", cartaoFidelidade);
				cliente.addItem("Cheque", cheq);
			    
				MenuBar fornecedor = new MenuBar(true);
			    fornecedor.addItem("Fornecedor", fornec);
			    
			    MenuBar funcionario = new MenuBar(true);
				funcionario.addItem("Funcionario", funcio);
				funcionario.addItem("Função", funca);
			
				MenuBar produto = new MenuBar(true);
				produto.addItem("Produto", produt);
				produto.addItem("Centro de Custo", centroCusto);
				produto.addItem("Grupo", grup);
	
			    dadosBasicos.addItem("Cliente"+imagem, true, cliente);
			    dadosBasicos.addItem("Fornecedor"+imagem, true, fornecedor);
			    dadosBasicos.addItem("Funcionario"+imagem, true, funcionario);
			    dadosBasicos.addItem("Produto"+imagem, true, produto);
		
			    MenuBar relatorios = new MenuBar(true);
			    relatorios.addItem("Geral", cmd);
			    relatorios.addItem("Produtos", cmd);
			    relatorios.addItem("Funcionários", cmd);
			    relatorios.addItem("Faturamento", cmd);
			    
			    MenuBar configuracao = new MenuBar(true);
			    configuracao.addItem("Cadastrar Quartos", cadQuartos);
			    configuracao.addItem("Tabela de Preços", tabelaPreco);
			    configuracao.addItem("Formas de Pagamento", formaPgto);
		
			    MenuBar usuario = new MenuBar(true);
			    usuario.addItem("Cadastrar Usuario", cadUsuario);
			    usuario.addItem("Alterar Senha", alterarSenha);
			    
			    // Make a new menu bar
			    menuBar.addItem("  Principal  ", principal);
			    menuBar.addItem("  Dados Básicos  ", dadosBasicos);
			    menuBar.addItem("  Configurações  ", configuracao);
			    menuBar.addItem("  Patrimonio  ", patrimonio);
			    menuBar.addItem("  Usuário  ", usuario);
			    menuBar.addItem("  Relatórios  ", relatorios);
		
			} else if(permissao == UsuarioUI.RECEPCIONISTA) {
				menuBar.addItem("  Principal  ", principal);
			} else if(permissao == UsuarioUI.CAMAREIRA) {
				
			} else {
				Window.alert("Não foi possível autenticar o usuário!");
			}
		}
		
		return menuBar;
	}
	
	static Command principal = new Command() {
		public void execute() {
			if(ClientSession.getInstance().getProperty("usuario") != null ) {
				TelaPrincipal.getInstance().refreshGrid();
				RootPanel.get("boxContent").clear();
				RootPanel.get("boxContent").add(TelaPrincipal.getInstance());
			} else {
				RootPanel.get("boxContent").clear();
				RootPanel.get("boxContent").add(new LoginPanel("Efetue o Login"));
			}
		}
	};
	
	static Command patrimonio = new Command() {
		public void execute() {
			TelaPrincipal.getInstance().refreshGrid();
			RootPanel.get("boxContent").clear();
			RootPanel.get("boxContent").add(new PatrimonioListPanel("Patrimonio"));
		}
	};
	
	static Command cadUsuario = new Command() {
		public void execute() {
			TelaPrincipal.getInstance().refreshGrid();
			RootPanel.get("boxContent").clear();
			RootPanel.get("boxContent").add(new UsuarioListPanel("Usuario"));
		}
	};
	
	static Command tabelaPreco = new Command() {
		public void execute() {
			TelaPrincipal.getInstance().refreshGrid();
			RootPanel.get("boxContent").clear();
			RootPanel.get("boxContent").add(new TabelaPrecoEditPanel());
		}
	};
	
	static Command formaPgto = new Command() {
		public void execute() {
			TelaPrincipal.getInstance().refreshGrid();
			RootPanel.get("boxContent").clear();
			RootPanel.get("boxContent").add(new FormaPgtoEditPanel());
		}
	};
	
	static Command alterarSenha = new Command() {
		public void execute() {
			if(ClientSession.getInstance().getProperty("usuario") != null ) {
				UsuarioUI user = (UsuarioUI)ClientSession.getInstance().getProperty("usuario");
				TelaPrincipal.getInstance().refreshGrid();
				RootPanel.get("boxContent").clear();
				RootPanel.get("boxContent").add(new AlterarSenhaPanel("Alterar Senha", user.getId()));
			} else {
				RootPanel.get("boxContent").clear();
				RootPanel.get("boxContent").add(new LoginPanel("Efetue o Login"));
			}
		}
	};
	
	static Command cartaoFidelidade = new Command() {
		public void execute() {
			RootPanel.get("boxContent").clear();
			RootPanel.get("boxContent").add(new CartaoFidelidadeListPanel("Cartão Fidelidade"));
		}
	};
	
	static Command cadQuartos = new Command() {
		public void execute() {
			RootPanel.get("boxContent").clear();
			RootPanel.get("boxContent").add(new CadQuartoListPanel("Quartos"));
		}
	};
	
	static Command clie = new Command() {
		public void execute() {
			RootPanel.get("boxContent").clear();
			RootPanel.get("boxContent").add(new ClienteListPanel("Cliente"));
		}
	};
	static Command tipoCliente = new Command() {
		public void execute() {
			RootPanel.get("boxContent").clear();
			RootPanel.get("boxContent").add(new TipoClienteListPanel("Tipo do Cliente"));
		}
	};
	static Command cheq = new Command() {
		public void execute() {
			RootPanel.get("boxContent").clear();
			RootPanel.get("boxContent").add(new ChequeListPanel("Cheque"));
		}
	};
	static Command fornec = new Command() {
		public void execute() {
			RootPanel.get("boxContent").clear();
			RootPanel.get("boxContent").add(new FornecedorListPanel("Fornecedor"));
		}
	};
	static Command funcio = new Command() {
		public void execute() {
			RootPanel.get("boxContent").clear();
			RootPanel.get("boxContent").add(new FuncionarioListPanel("Funcionário"));
		}
	};
	static Command funca = new Command() {
		public void execute() {
			RootPanel.get("boxContent").clear();
			RootPanel.get("boxContent").add(new FuncaoListPanel("Função"));
		}
	};
	static Command produt = new Command() {
		public void execute() {
			RootPanel.get("boxContent").clear();
			RootPanel.get("boxContent").add(new ProdutoListPanel("Produto"));
		}
	};
	static Command centroCusto = new Command() {
		public void execute() {
			RootPanel.get("boxContent").clear();
			RootPanel.get("boxContent").add(new CentroCustoListPanel("Centro de Custo"));
		}
	};
	static Command grup = new Command() {
		public void execute() {
			RootPanel.get("boxContent").clear();
			RootPanel.get("boxContent").add(new GrupoListPanel("Grupo"));
		}
	};
	static Command subprod = new Command() {
		public void execute() {
//			RootPanel.get("boxContent").clear();
//			RootPanel.get("boxContent").add(new Subproduto("Cliente"));
		}
	};
	static Command cmd = new Command() {
		public void execute() {
//			RootPanel.get("boxContent").clear();
//			RootPanel.get("boxContent").add(new ChequeListPanel("STATUS DO ANDAMENTO"));
		}
	};
		
}